//
//  GMSPanoramaCamera.h
//  Google Maps SDK for iOS
//
//  Copyright 2013 Google Inc.
//
//  Usage of this SDK is subject to the Google Maps/Google Earth APIs Terms of
//  Service: https://developers.google.com/maps/terms
//

#import <GoogleMaps/GMSOrientation.h>

/**
 * GMSPanoramaCamera is used to control the viewing direction of a
 * GMSPanoramaView. It does not contain information about which particular
 * panorama should be displayed.
 */
@interface GMSPanoramaCamera : NSObject

/**
 * Designated initializer. Configures this GMSPanoramaCamera with |orientation|,
 * |zoom| and |FOV|. These values will be clamped to acceptable ranges.
 */
- (id)initWithOrientation:(GMSOrientation)orientation
                     zoom:(CGFloat)zoom
                      FOV:(CGFloat)FOV;

/**
 * Convenience constructor specifying heading and pitch as part of
 * |orientation|, plus |zoom| and default field of view (90 degrees).
 */
+ (id)cameraWithOrientation:(GMSOrientation)orientation zoom:(CGFloat)zoom;

/**
 * Convenience constructor specifying |heading|, |pitch|, |zoom| with default
 * field of view (90 degrees).
 */
+ (id)cameraWithHeading:(CGFloat)heading
                  pitch:(CGFloat)pitch
                   zoom:(CGFloat)zoom;

/**
 * Convenience constructor for GMSPanoramaCamera, specifying all camera
 * properties with heading and pitch as part of |orientation|.
 */
+ (id)cameraWithOrientation:(GMSOrientation)orientation
                       zoom:(CGFloat)zoom
                        FOV:(CGFloat)FOV;

/**
 * Convenience constructor for GMSPanoramaCamera, specifying all camera
 * properties.
 */
+ (id)cameraWithHeading:(CGFloat)heading
                  pitch:(CGFloat)pitch
                   zoom:(CGFloat)zoom
                    FOV:(CGFloat)FOV;

/**
 * The field of view (FOV) encompassed by the larger dimension (width or height)
 * of the view in degrees. This is clamped to the range [1, 160] degrees, and
 * has a default value of 90.
 *
 * Lower FOV values produce a zooming in effect; larger FOV values produce an
 * fisheye effect.
 */
@property(nonatomic, assign, readonly) CGFloat FOV;

/**
 * Adjusts the visible region of the screen.  A zoom of N will show the same
 * area as the central width/N height/N area of what is shown at zoom 1.
 *
 * Zoom is clamped to the implementation defined range [1, 5].
 */
@property(nonatomic, assign, readonly) CGFloat zoom;

/**
 * The camera orientation, which groups together heading and pitch.
 */
@property(nonatomic, assign, readonly) GMSOrientation orientation;

@end
